home *** CD-ROM | disk | FTP | other *** search
- /********************************************************/
- /* */
- /* copyright(c) 1981 By Mike Bernson */
- /* */
- /* submit command for cpm 2.x */
- /* read input file and convert to $$$.sub with */
- /* $1-$9 to pram from comand line and convert */
- /* ^a to control character */
- /* */
- /********************************************************/
-
- #define ERROR -1 /* error return value */
- #define LF 0x0a /* value used for line feed */
- #define CR 0x0d /* value used for return */
- #define ENDFILE 0x1a /* value used for end of file */
-
- char infcb[36]; /* pointer to input fcb */
- char outfcb[36]; /* output fcb */
-
- char *prt; /* just a spare pointer */
- int inpoff; /* input buffer offset */
- int outoff; /* output buffer offset */
-
- int line; /* current line number */
-
- char inbuff[128]; /* input buffer */
- char outbuff[17000]; /* output buffer */
-
- /********************************************************/
- /* */
- /* main */
- /* */
- /* function: open input and output data file */
- /* also process data and output */
- /* data to $$$.sub and set loc 8 ff*/
- /* */
- /* Date written: Jan 28, 1981 by Mike Bernson */
- /* */
- /********************************************************/
- main(argc,argv)
- int argc; /* number of arg on command line +1 */
- int argv[]; /* pointer to each arg on command line */
- {
- char filename[132]; /* hold input file name */
-
- strcpy(filename,argv[1]);
- strcat(filename,".sub");
-
- if (open(infcb,filename) == ERROR) {
- infcb[0]=1; /* try drive a */
- if (bdos(15,infcb) == 0xff) {
- puts("Input file not found");
- exit();
- }
- }
- for(line=argc; line<12; argv[line++]="");
- inpoff=128;
- line=1;
-
- /* process input file and write output */
- while(1) {
- doinput(argv+1);
- dooutput();
- }
- }
-
-
- /********************************************************/
- /* */
- /* doinput */
- /* */
- /* function: to proccess input buffer and */
- /* change $1-$9 to text needed and */
- /* convert '^'a to control char */
- /* */
- /* date written Jan 28, 1981 By Mike Bernson */
- /* */
- /********************************************************/
- doinput(parm)
- int parm[];
- {
- int current; /* current character working on */
-
- outoff=1; /* set output offset to zero */
-
- /* pick up 1 line of input */
- while(outoff<120) {
-
- /* get charcter and see what need to be done */
- switch(current=getbuff()) {
-
- /* end of file */
- case ENDFILE :
- done();
-
- /* '$' can be $1-$9 or $$ */
- case '$' :
- if ((current=getbuff())=='$') {
- putbuff('$');
- break;
- }
- if (current>='0' && current<='9') {
- prt=parm[current-'0'];
- while(*prt) putbuff(*prt++);
- break;
- }
- error("Invalid parmeter");
- break;
-
- /* check for control chraracter */
- case '^' :
- current=getbuff();
- if (current>='A' && current<='Z')
- putbuff(current-'@');
- else error("Invalid control character ");
- break;
-
- /* check for end of line */
- case CR :
- return;
-
- /* line feed ingore */
- case LF :
- break;
-
- /* must be a viald cjaracter put in output buffer */
- default:
- putbuff(current);
- }}
- }
-
- /********************************************************/
- /* */
- /* dooutput */
- /* */
- /* function: to write output record to disk */
- /* put character count at offset 0 */
- /* */
- /* date written: dec 16, 1980 By Mike Bernson */
- /* */
- /********************************************************/
- dooutput()
- {
- outbuff[(line-1)*128]=outoff-1; /* character count */
-
- /* zero buffer till end */
- while(outoff<128) putbuff(0);
- if (++line>148) error("Too many lines");
- }
-
- /********************************************************/
- /* */
- /* done */
- /* */
- /* function: to write output buffer out */
- /* in backward record format */
- /* */
- /* Date written: Dec 16, 1980 By Mike Bernson */
- /* */
- /********************************************************/
- done()
- {
- char temp;
-
- /* create output file on disk a */
- if (open(outfcb,"A:$$$.SUB") != ERROR)
- outfcb[32]=outfcb[15];
- else if (create(outfcb,"A:$$$.SUB") == ERROR) {
- puts("Output File not created");
- exit();
- }
- while(--line) {
- if (write(outfcb,outbuff+128*(line-1),1) == ERROR) {
- error("Disk is Full");
- exit();
- }
- }
- close(outfcb);
- prt=8;
- *prt=255;
- exit();
- }
-
-
- /********************************************************/
- /* */
- /* getbuff */
- /* */
- /* function: to getn next character from */
- /* from input buffer and convert */
- /* to upper case */
- /* */
- /* date written: Dec 16, 1980 by Mike Bernson */
- /* */
- /********************************************************/
- getbuff()
- {
- if (inpoff == 128) {
- if (read(infcb,inbuff,1) == ERROR) return ENDFILE;
- inpoff=0;
- }
- return toupper(inbuff[inpoff++]);
- }
-
- /********************************************************/
- /* */
- /* putbuff */
- /* */
- /* function: to write chracter to output */
- /* buff and inc offset */
- /* */
- /* input: character to write */
- /* */
- /* date written: Dec 16, 1980 By Mike Bernson */
- /* */
- /********************************************************/
- putbuff(data)
- char data;
- {
- outbuff[(line-1)*128+outoff++]=data;
- }
-
-
- /********************************************************/
- /* */
- /* error */
- /* */
- /* function: to print error message follow */
- /* by at line (line number) */
- /* */
- /* date written: dec 16, 1980 By Mike Bernson */
- /* */
- /********************************************************/
- error(msg)
- char *msg;
- {
- puts(msg); /* print error message */
- puts(" at line "); /* print "at line" */
- outdec(line); /* print line number */
- exit() ; /* end back to cpm */
- }
-
- /********************************************************/
- /* */
- /* outdec */
- /* */
- /* function: to output number in dec from */
- /* to console */
- /* */
- /* date written: Dec 16, 1980 By Mike Bernson */
- /* */
- /********************************************************/
- outdec(number)
- int number;
- {
- char zero,num;
- int place;
-
- place=10000;
- zero=0;
-
- while(place>0) {
- num=number/place+'0'; /* get current digit */
- if (num != '0' || place ==1 || zero) {
- zero=1; /* set zero suppress */
- putch(num); /* print character */
- }
- number=number % place;
- place=place/10;
- }
- }
- place=place/10;
- }
- }
- 10;
- }
- }
- ;
- place=place/10;